package com.deyuanyun.pic.pbf.service;


import com.deyuanyun.pic.pbf.controller.dto.DefectInfoDTO;
import com.deyuanyun.pic.pbf.controller.dto.DefectSuggestVO;
import com.deyuanyun.pic.pbf.controller.dto.InspTaskQueryVO;
import com.deyuanyun.pic.pbf.controller.dto.NearbyLocationDTO;
import com.deyuanyun.pic.pbf.domain.DefectInfo;
import com.deyuanyun.pic.pbf.domain.RepairTaskWorkload;

import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public interface DefectInfoService {
    
    /**
     * 查询指定管道某个位置的附近的定位位置。
     * 附近的 环焊缝、弯头、Mark
     * 
     * @param pipeLineId
     * @param mileage
     * @return
     */
    List<NearbyLocationDTO> queryNearbyLocationByMileage(String pipeLineId,BigDecimal mileage);
    
    DefectInfo selectByPrimaryKey(String id);

    int deleteByPrimaryKey(String id);

    int updateByPrimaryKeySelective(DefectInfo record);

    int updateByPrimaryKey(DefectInfo record);

    int insert(DefectInfo record);

    /**
     * 根据缺陷点编号，查询DefectInfoDTO
     * 
     * @param defectInfoId
     * @return
     */
    DefectInfoDTO queryDefectInfoDTO(String defectInfoId);
    
    /**
     * 根据条件查询缺陷信息
     * @param defectSuggestVO {@link DefectSuggestVO}
     * @return
     * @throws
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-16
     */
    public List<DefectInfoDTO> queryBySuggestVO(DefectSuggestVO defectSuggestVO);


    /**
     * 根据缺陷id集合统计各个缺陷的总工作量
     * @param defectIds 缺陷id集合
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-16
     */
    public RepairTaskWorkload countWorkload(List<String> defectIds);

    /**
     * 根据管段id、起点绝对距离和终止绝对距离得到检测任务信息
     * @param inspTaskQueryVO
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-07-05
     */
    public List<LinkedHashMap<String, Object>> queryTaskInfo(InspTaskQueryVO inspTaskQueryVO);

    /**
     * 根据检测任务id获取到所有的评价报告
     * @param taskId
     * @return
     */
    public List<Map<String, Object>> queryEvaluTaskAtta(String taskId);


    /**
     * 打包所有附件
     * @param attaDataMap 附件信息
     * @return
     */
    public void queryEvaluTaskAtta(OutputStream os, List<Map<String, Object>> attaDataMap);
}